<?php
/**
 * 招集学年選択コンポーネントモジュール
 */
require_once __DIR__ . '/../ZendPartial.php';
require_once __DIR__ . '/SelectDraftAgeMapper.php';
require_once 'ZendPartial/input/checkbox/CheckboxController.php';
require_once 'Request/Request.php';
require_once APPLICATION_PATH . '/models/Names/Names.php';

/**
 * 招集学年選択コンポーネントクラス
 * @link http://www.evernote.com/shard/s89/sh/2efd6b45-8db3-42b2-85ab-774f6036bef5/f0126baf6cc7d76ca1a256bd39282541
 */
class Components_SelectDraftAgeController extends ZendPatrial_Input_CheckboxController
{
	/** マッパオブジェクト */
	protected $_objMapper;
	/** カレンダーデータオブジェクト */
	protected $_modelCalendar;
	/** リクエストオブジェクト */
	protected $_objRequest;

	/**
	 * コンストラクタ
	 * @param Models_Calendar_Controller $objCalendar
	 */
	public function __construct($objCalendar = FALSE)
	{
		parent::__construct(Names::DRAFTAGE);
		$this->add(Models_Calendar_Controller::VALUE_GAKUNEN1, Models_Calendar_Controller::VALUE_GAKUNEN1);
		$this->add(Models_Calendar_Controller::VALUE_GAKUNEN2, Models_Calendar_Controller::VALUE_GAKUNEN2);
		$this->add(Models_Calendar_Controller::VALUE_GAKUNEN3, Models_Calendar_Controller::VALUE_GAKUNEN3);
		$this->add(Models_Calendar_Controller::VALUE_GAKUNEN4, Models_Calendar_Controller::VALUE_GAKUNEN4);
		$this->add(Models_Calendar_Controller::VALUE_GAKUNEN5, Models_Calendar_Controller::VALUE_GAKUNEN5);
		$this->add(Models_Calendar_Controller::VALUE_GAKUNEN6, Models_Calendar_Controller::VALUE_GAKUNEN6);

		$this->_modelCalendar = $objCalendar;
		$this->_objRequest = new Lib_Request();

		/*** 初期選択状態を設定する */
		$this->_setInitialSelected();
	}

	/**
	 * 初期選択状態を設定する
	 */
	protected function _setInitialSelected()
	{
		/*** カレンダーデータセットモデルが設定されていない場合は、リクエストから初期設定する */
		if ( $this->_modelCalendar !== FALSE) {
			$iD = $this->_objRequest->get(Names::YOTEIID);
			/*** リクエストに予定ＩＤが設定されていない場合何もしない */
			if (!empty($iD)) {
				$CalendarDataset = $this->_modelCalendar->searchId($iD);
				/*** 対象となる予定ＩＤがデータに存在しない場合、何もしない */
				if ($CalendarDataset !== FALSE) {
					$_REQUEST[Names::DRAFTAGE] = explode(',', $CalendarDataset[Models_Calendar_Controller::KEY_DRAFT_AGE]);
				}
			}
		}
	}

	/**
	 * フェッチ
	 * 指定学年のチェックボックスを返す
	 * $GakunenにはModels_Calendar_Controller::VALUE_GAKUNEN1一連を期待する
	 * @param $Gakunen 学年
	 * @see Components_ZendPartial::fetch()
	 */
	public function fetch2($Gakunen)
	{
		/***
		 * バリュー決定
		 */
		switch ($Gakunen) {
			case Models_Calendar_Controller::VALUE_GAKUNEN1:
				$this->view->VALUE = Models_Calendar_Controller::VALUE_GAKUNEN1;
				break;
			case Models_Calendar_Controller::VALUE_GAKUNEN2:
				$this->view->VALUE = Models_Calendar_Controller::VALUE_GAKUNEN2;
				break;
			case Models_Calendar_Controller::VALUE_GAKUNEN3:
				$this->view->VALUE = Models_Calendar_Controller::VALUE_GAKUNEN3;
				break;
			case Models_Calendar_Controller::VALUE_GAKUNEN4:
				$this->view->VALUE = Models_Calendar_Controller::VALUE_GAKUNEN4;
				break;
			case Models_Calendar_Controller::VALUE_GAKUNEN5:
				$this->view->VALUE = Models_Calendar_Controller::VALUE_GAKUNEN5;
				break;
			case Models_Calendar_Controller::VALUE_GAKUNEN6:
				$this->view->VALUE = Models_Calendar_Controller::VALUE_GAKUNEN6;
				break;
		}
		/*** 表示文字設定 */
		$this->view->DISP = $this->view->VALUE;
		/*** 招集済み判定 */
		if ($this->_objMapper->isDrafted($Gakunen)){
			$this->view->SELECTED = 'checked="checked"';
		}

		$sHtml = parent::fetch();
		return $sHtml;
	}

	/**
	 * 招集設定された学年をＨＴＴＰリクエストから取得する
	 */
	public static function getSelectedFromHttpRequest()
	{
		$objRequest = new Lib_Request();
		$DraftAgeList = $objRequest->get(self::NAME_CHECKBOX);
		return $DraftAgeList;
	}

}